//***************************************************************************//
//* 版权所有  www.sh-easy.com
//*
//* 内容摘要：音视频收发线程
//*	
//* 当前版本：V1.0		
//* 作    者：zhfayuan
//* 完成日期：2015-12-26
//**************************************************************************//

#if !defined(SDPRIVFILEMUX_H)
#define SDPRIVFILEMUX_H

#include "SDAVCommn.h"
#include "SDTermCommon.h"
#include "SDPrivateMux.h"


class CPrivFileMuxer
{

public:
	CPrivFileMuxer();
	virtual ~CPrivFileMuxer();

public:

	//对外接口
    BOOL    Create(std::string strPath,UINT64 unUid,BYTE byCodec,UINT unToken);
	void	Close();

	//发送一帧视频码流，需附带H264/H265起始码
	void	WriteData(BYTE byCodec,UINT unLen, BYTE* buf);

    void    UpdateCrypto(BYTE byEnCrypto,UINT unCryptoMethod);

    //设置SM4加密密钥
    void    UpdateEncKey(UINT unToken,BYTE*key,UINT unLen);

private:

	static int FileMuxerThread(void* pParam);
	static int FileMuxerThreadClose(void* pParam);

private:
	//RTP音视频推送、接收线程相关
	CSDThread			m_FileMuxerThread;

	volatile BOOL		m_bFileMuxerThreadRun;

    CPrivateMux         m_PrivMux;
	//用于视频编码与视频发送线程之间交互数据的空满包队列
	DualQueId			m_ptFileMuxerQue;


	//保护锁资源
	//Close动作与Create动作之间的互斥锁
	void*				m_pcsClose;
	bool				m_bClosed;

	//Close动作与外层发送接口之间的保护锁
	void*				m_pcsFile;


	UINT64				m_unUid;
};
#endif // !defined(SDPRIVTSMUX_H)
